package controller

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"manhe/model"
	"manhe/service"
	"manhe/tool"
	"strconv"
	"time"
)

type BindBoxController struct {
}

type ResponseArticle struct {
	Code    int      `json:"code"`    //业务状态码
	Message string   `json:"message"` // 提示信息
	Data    []string `json:"data"`    // 数据
}

func (this *BindBoxController) Router(engine *gin.Engine) {
	u := engine.Group("/bindbox")
	u.POST("/add", this.AddBindBox)       //创建盲盒
	u.POST("/modify", this.ModifyBindBox) //修改盲盒
	u.GET("/get", this.GetBindBox)        //查询盲盒详情
	u.GET("/get_list", this.GetBindBoxs)  //查询盲盒列表信息
	u.GET("/rdpc", this.GetRandomPc)      //随机查询奖品批次

}

// @Summary 创建盲盒
// @Tags 盲盒服务
// @Accept json
// @Produce json
// @Param req body tool.Demo true "req"
// @Success 200 {object} ResponseArticle
// @Router /bindbox/add [post]
func (this *BindBoxController) AddBindBox(ctx *gin.Context) {

	//声明一个结构体接收传参
	var bindbox model.BindBox
	//解析参数
	fmt.Println(ctx.Request.Body)
	err := tool.Decode(ctx.Request.Body, &bindbox)
	if err != nil {
		fmt.Println(err)
		tool.Failed(ctx, "参数解析失败")
		return
	}
	fmt.Println("结构体内容:", bindbox)
	//
	ser := service.BindBoxService{}
	res := ser.Addbindbox(bindbox)
	if res != true {
		tool.Failed(ctx, "创建失败")
		return
	}
	tool.Success(ctx, "创建成功")
	return
}

// @Summary 修改盲盒信息
// @Tags 盲盒服务

func (*BindBoxController) ModifyBindBox(ctx *gin.Context) {
	//声明一个结构体接收传参
	var bindbox model.BindBox
	//解析参数
	fmt.Println(ctx.Request.Body)
	err := tool.Decode(ctx.Request.Body, &bindbox)
	if err != nil {
		fmt.Println(err)
		tool.Failed(ctx, "参数解析失败")
		return
	}

	//调用修改服务
	ser := service.BindBoxService{}
	res := ser.Modifybindbox(bindbox)
	if res != true {
		tool.Failed(ctx, "修改盲盒信息失败")
		return
	}
	tool.Success(ctx, "修改盲盒信息成功")
	return
}

// @Summary 查询盲盒详情信息
// @Tags 盲盒服务
func (*BindBoxController) GetBindBox(ctx *gin.Context) {

	//获取盲盒ID
	id, err := strconv.Atoi(ctx.Query("id"))
	if err != nil {
		tool.Failed(ctx, "解析失败")
	}
	//调用查询服务
	ser := service.BindBoxService{}
	bindbox := ser.Getbindbox(id)
	//返回查询结果
	if bindbox != nil {
		tool.Success(ctx, &bindbox)
		return
	}
	tool.Failed(ctx, "查询失败")
	return
}

// @Summary 分页查询盲盒列表信息
// @Tags 盲盒服务

func (*BindBoxController) GetBindBoxs(ctx *gin.Context) {
	//获取请求参数
	list := &model.Boxlist{}
	fmt.Println(list.Name)
	if err := ctx.ShouldBindQuery(list); err != nil {
		tool.Failed(ctx, "参数解析错误")
		return
	}

	//提取不定参条件
	var box model.BindBox
	box.BoxName = list.Name   //盲盒名称
	box.BoxPrice = list.Price //盲盒价格

	//调用分页查询盲盒的列表
	ser := service.BindBoxService{}
	mhs := ser.Getbindboxlist(list, &box)

	tool.Success(ctx, mhs)
	return
}

// @Summary 随机获取盲盒奖品批次
func (*BindBoxController) GetRandomPc(ctx *gin.Context) {
	//获取请求参数
	id, err := strconv.Atoi(ctx.Query("id"))

	//校验参数的格式
	if err != nil {
		tool.Failed(ctx, "参数解析错误")
		return
	}
	//调用随机获取的服务
	ser := service.BindBoxService{}
	randompc, err := ser.GetRandomPc(id)
	if err != nil {
		tool.Failed(ctx, "查询失败")
		return
	}
	//向redis插入一个参与抽奖的标记
	fmt.Println("sj:", randompc.BatchNo)
	tool.Rdclien.Set("sj"+randompc.BatchNo, 1, time.Second*20)
	//返回结果
	tool.Success(ctx, randompc)
	return
}

// @Summary 锁定盲盒奖品信息
func (*BindBoxController) LockBindBox(ctx *gin.Context) {
	//获取选择的盲盒奖品
	ctx.Query("box_id")
	ctx.Query("batch_no")
	ctx.Query("Prize_id")
	//判断该商品是否还有库存

	//锁定奖品的库存

	//向redis记录奖品信息，设置有效时间

}
